# !/usr/bin/env python3
# coding=utf-8
"""
自己编写的对话框类的基类
作者: KydGroups
版本: 0.0.1
完成日期: 2024-03-02
修改记录:
"""
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *

class KydSuperDlg():
    """
    自己编写的对话框的基类
    """
    def __init__(self, strTitle:str="", nWidth:int=640, nHeight:int=480):
        """
        :DESCRIPTION
            构造函数
        :param strTitle: 对话框标题
        :param nWidth: 对话框宽度
        :param nHeight: 对话框高度
        :RETURNS: nothings
        """
        if not strTitle:
            self.strTitle = "未定义标题"
        else:
            self.strTitle = strTitle #子类重写
        self.topWin = Toplevel() #顶层窗口
        self.topWin.protocol("WM_DELETE_WINDOW", self.__OnClose) #窗口关闭时
        self.nDlgWidth = nWidth #对话框窗口宽度,子类重写
        self.nDlgHeight = nHeight #对话框窗口高度,子类重写

    def __OnClose(self):
        """
        :DESCRIPTION
            窗口关闭时调用函数
        """
        result = messagebox.askokcancel("确认", "确认关闭窗口吗？")
        if result:
            self.WriteDataToFile() #将数据写入文件
            self.topWin.destroy()
            self.topWin.quit() #退出窗口mainloop函数
        else:
            return

    def WriteDataToFile(self):
        """
        :DESCRIPTION
            将数据写入文件的函数,这是个虚函数,如果要写入数据,则子函数必须必须实现
        """
        pass

    def CreateWinWidget(self):
        """
        :DESCRIPTION
            生成窗口控件函数,子类必须使用扩展式调用,先调用父类的函数,再写子类的实现
        """
        pass

    def Run(self):
        """
        :DESCRIPTION
            启动界面运行程序
        """
        nScreenWidth = self.topWin.winfo_screenwidth() #获取屏幕宽度
        nScreenHeight = self.topWin.winfo_screenheight() #获取屏幕高度
        size = "%dx%d+%d+%d" % (self.nDlgWidth, self.nDlgHeight, (nScreenWidth - self.nDlgWidth)/2, (nScreenHeight- self.nDlgHeight)/2)
        self.topWin.geometry(size) #设置窗口大小
        self.topWin.title(self.strTitle) #设置窗口标题
        self.topWin.resizable(False, False)
        self.CreateWinWidget() #生成窗口控件
        self.topWin.mainloop()
